using System;
using System.Collections;
using Gtk;
using NHibernate.Cfg;
using NHibernate;

namespace PNhibernate
{
	class MainClass
	{
		//CORRECTA EN Mono .NET 4.0
		//TODO: COMPROBAR SI FUNCIONA EN Mono .NET 3.5
		public static void Main (string[] args)
		{
			Application.Init ();
			
			Configuration configuration = new Configuration();
			configuration.Configure();
			
			configuration.AddAssembly("PNhibernate");
			
			ISessionFactory sessionFactory = configuration.BuildSessionFactory();
			
			ISession session = sessionFactory.OpenSession();
						Categoria categoria = session.Load<Categoria>(2L);
//			
//			Console.WriteLine("categoria.Nombre={0}", categoria.Nombre);
//			
//			Dejo el Insert Comentado para no llenar de basura la base de datos.
//			categoria.Nombre = "categoria " + DateTime.Now;
//			Categoria categoria = new Categoria();
//			categoria.Nombre = "categoria " + DateTime.Now;
			
			Console.WriteLine("Select * mediante HQL");
			IQuery query=session.CreateQuery("from Categoria");
			IList results=query.List();
			foreach (Categoria c in results)
			{
				Console.WriteLine(String.Format("id={0}, nombre={1}", c.Id, c.Nombre));
			}
			Console.WriteLine("");
			
			Console.WriteLine("SELECT (con WHERE) mediante HQL");
			query=session.CreateQuery("from Categoria where id>=2");
			results=query.List();
			foreach (Categoria c in results)
			{
				Console.WriteLine(String.Format("id={0}, nombre={1}", c.Id, c.Nombre));
			}
			Console.WriteLine("");
			
			Console.WriteLine ("SELECT * mediante Criteria");
			ICriteria criteria=session.CreateCriteria("Categoria");
			results=criteria.List();
			foreach (Categoria c in results)
			{
				Console.WriteLine(String.Format("id={0}, nombre={1}", c.Id, c.Nombre));
			}
			Console.WriteLine("");
			
			
			Console.WriteLine("SELECT (con WHERE) mediante Criteria");
			criteria=session.CreateCriteria("Categoria");
			criteria.Add(NHibernate.Criterion.Expression.Le("Id", 2L));
			results = criteria.List();
			foreach (Categoria c in results)
			{
				Console.WriteLine(String.Format("id={0}, nombre={1}", c.Id, c.Nombre));
			}
			
			session.Save(categoria);
			session.Flush();
			
			session.Close();
			
			sessionFactory.Close();
			
			MainWindow win = new MainWindow ();
			win.Show ();
			Application.Run ();
		}	
	}
}
